/*
 * Copyright 2000-2020 ALPHA LAB.Inc All Rights Reserved.
 */
package com.alphalab.framework.role;

import java.io.Serializable;
import java.util.List;
import java.util.Map;  
import com.alphalab.framework.domain.IValueObject;
import com.alphalab.framework.domain.ItemCondition; 

/**
 * 定义GeneralQueryRole的基本方法.
 * 与IGeneralQueryDao保持一致
 * @author allen 
 * @param <VO>
 * @version 1.0.0 2017年8月16日
 */
public interface IGeneralQueryRole<VO extends IValueObject> extends IRole  {  

	/**
	 * 根据主键返回对象.
	 * @param id 主键
	 * @return VO
	 */
	VO find(Serializable id);	
	
	/**
	 * 根据查询条件返回分页结果集.
	 * @param itemConditions 查询条件，为空则表示无条件
	 * @param pageIndex 第几页，从1开始
	 * @param pageSize 每页的记录总数
	 * @param orderBy 排序字段，为空表示默认排序
	 * @param isDesc 是否降序，为true表示降序
	 * @return List<VO>
	 */
	List<VO> findListByPageWithCondition(List<ItemCondition> itemConditions, int pageIndex, int pageSize, 
			String orderBy, boolean isDesc);	
	
	/**
	 * 根据查询条件返回全部结果集.
	 * @param itemConditions 查询条件，为空则表示无条件
	 * @param orderBy 排序字段，为空表示默认排序
	 * @param isDesc 是否降序，为true表示降序
	 * @return List<VO>
	 */
	List<VO> findListWithCondition(List<ItemCondition> itemConditions, String orderBy, boolean isDesc);	 
	
	/**
	 * 根据hql查询返回全部结果集.
	 * @param hql hql
	 * @param conditions 查询参数键值对集合
	 * @return List<VO>
	 */
	List<VO> findByHql(String hql, Map<String, Object> conditions);	

	/**
	 * 根据hql查询返回分页结果集.
	 * @param hql hql
	 * @param conditions 查询参数键值对集合
	 * @param pageIndex 第几页，从1开始
	 * @param pageSize 每页的记录总数
	 * @return List<VO>
	 */
	List<VO> findByHql(String hql, Map<String, Object> conditions, int pageIndex, int pageSize);
	
	/**
	 * 根据原生sql查询返回全部结果集.
	 * @param sql sql
	 * @param conditions 查询参数键值对集合
	 * @return List<Map>
	 */
	List<Map> findBySql(String sql, Map<String, Object> conditions);

	/**
	 * 根据原生sql查询返回分页结果集.
	 * @param sql sql
	 * @param conditions 查询参数键值对集合
	 * @param pageIndex 第几页，从1开始
	 * @param pageSize 每页的记录总数
	 * @return List<Map>
	 */
	List<Map> findBySql(String sql, Map<String, Object> conditions, int pageIndex, int pageSize);	
	
}
